package observerPattern.ringEvent;

import observerPattern.ringEvent.listener.IBellEventListener;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author： pang-yun
 * @date： 2021-10-26 11:23
 * 功能目的 ：用于
 */

public class BellEventSource {
    // 监听器 容器
    private List<IBellEventListener> listeners;

    // 构造器
    public BellEventSource() {
        listeners = new ArrayList<IBellEventListener>();
    }


    // 绑定 监听器
    public void addListener(IBellEventListener listener){
        listeners.add(listener);
    }

    // 时间 触发  当 铃声值 发生 改变时 触发事件
    public void ring(boolean sound){
        String type = sound? "上课铃": "下课铃";
        System.out.println(type);
        RingEvent ringEvent = new RingEvent(this, sound);
        notifies(ringEvent);

    }

    //当事件发生时,通知绑定在该事件源上的所有监听器做出反应（调用事件处理方法）
    protected void notifies(RingEvent e) {
        IBellEventListener ren = null;
        Iterator<IBellEventListener> iterator = listeners.iterator();
        while (iterator.hasNext()) {
            ren = iterator.next();
            ren.heardBell(e);
        }
    }

}
